import os
import pandas as pd


def filter_excel_by_column(
    input_dir="input",
    output_dir="output",
    key_column="ID",
    old_file_name="表2.xlsx",
    new_file_name="表1.xlsx",
    output_file="filtered_result.xlsx",
):
    """
    从 old_file_name 中剔除在 new_file_name 中已存在 key_column 的记录，保留 old_file_name 所有字段。
    返回输出文件绝对路径（output_path）。
    （保持原有逻辑，仅封装为可被 server.py 调用）
    """
    # 文件路径
    old_file_path = os.path.join(input_dir, old_file_name)
    new_file_path = os.path.join(input_dir, new_file_name)
    output_path = os.path.join(output_dir, output_file)

    # 检查文件是否存在
    if not os.path.exists(old_file_path):
        raise FileNotFoundError(f"文件不存在: {old_file_path}")
    if not os.path.exists(new_file_path):
        raise FileNotFoundError(f"文件不存在: {new_file_path}")

    # 读取 Excel 文件，指定 dtype 为 str 保留前导零
    try:
        old_df = pd.read_excel(old_file_path, dtype=str)
        new_df = pd.read_excel(new_file_path, dtype=str)
    except Exception as e:
        raise ValueError(f"读取 Excel 失败: {e}")

    # 检查关键列是否存在
    if key_column not in old_df.columns:
        raise ValueError(f"对比列 '{key_column}' 在 {old_file_name} 中不存在")
    if key_column not in new_df.columns:
        raise ValueError(f"对比列 '{key_column}' 在 {new_file_name} 中不存在")

    # 获取 new_df 中的关键列值集合
    new_keys = set(new_df[key_column].dropna())

    # 过滤掉 old_df 中在 new_df 已存在的记录
    filtered_df = old_df[~old_df[key_column].isin(new_keys)].copy()

    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)

    # 保存结果（保持原有保存逻辑）
    try:
        with pd.ExcelWriter(output_path, engine="openpyxl") as writer:
            filtered_df.to_excel(writer, index=False)
    except Exception as e:
        raise ValueError(f"保存结果文件失败: {e}")

    return output_path
